import axios from 'axios'
import { ElLoading } from 'element-plus'
import { useUserStore } from '@/stores'

const BASE_URL = 'http://big-event-vue-api-t.itheima.net'

// 创建axios实例
export const instance = axios.create({
  baseURL: BASE_URL,
  timeout: 10000,
})

// 配置通用 header
axios.defaults.headers.post['Content-Type'] = 'application/json'

const userStore = useUserStore()

var loadingInstance

// 请求拦截配置
instance.interceptors.request.use(
  (config) => {
    // 配置loading
    loadingInstance = ElLoading.service({ fullscreen: true })

    // 配置token
    const token = userStore.token
    if (token) {
      config.headers['Access-Token'] = token
    }

    config.headers.platform = 'H5'

    return config
  },
  (err) => {
    return Promise.reject(err)
  },
)

// 请求响应拦截
instance.interceptors.response.use(
  (resp) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么 (默认axios会多包装一层data，需要响应拦截器中处理一下)
    const res = resp.data

    // console.log(resp)

    // console.log('------' + JSON.stringify(res))
    if (resp.status !== 200) {
      // 给错误提示, Toast 默认是单例模式，后面的 Toast调用了，会将前一个 Toast 效果覆盖
      // 同时只能存在一个 Toast

      // 判断登录态
      if (resp.status == 401 && resp.message == '没有找到用户信息') {
        ElMessageBox.alert('当前未登录, 请前往登录', '提示', {
          // if you want to disable its autofocus
          // autofocus: false,
          confirmButtonText: '确定',
          callback: (action) => {
            // 跳转到登录页
          },
        })
      } else {
        ElMessage(res.message)
        // 抛出一个错误的promise
        return Promise.reject(res.message)
      }
    } else {
      // 正确情况，直接走业务核心逻辑，清除loading效果
      loadingInstance.close()
    }
    return res
  },
  (err) => {},
)
